package cn.ac.iscas.service.common.analyzer;



import cn.ac.iscas.domain.component.ComponentParameter;
import cn.ac.iscas.domain.view.ParameterItem;
import com.iscas.datasong.lib.common.DataSongException;
import com.iscas.datasong.lib.util.DataSongStringUtils;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class AnalyzerParameter extends ComponentParameter implements IAnalyzerParameter{
    private String modelPath;

    @Override
    public List<String> analyzeOutputColumn(List<String> columns) {
        if(columns == null ){
            columns = new ArrayList<>();
        }

        if(viewParams!=null){
            for(ParameterItem tmp : viewParams){
                if(tmp.isDelete()){
                    columns.remove(tmp.getId());
                }else if(tmp.isAdd()) {
                    columns.add(tmp.getValue().toString());
                }
            }
        }

        return columns;
    }

    @Override
    public Map<String, Object> getSimpleParameter() throws DataSongException {
        Map<String, Object> parameter = new HashMap<>();
        if(viewParams != null){
            Map<String, Map<String,Object>> groupMap = new HashMap<>();
            for(ParameterItem tmp : viewParams){
                if(DataSongStringUtils.isEmpty(tmp.getGroup())) {
                    parameter.put(tmp.getId(), tmp.getValue());
                }else{
                    if(!groupMap.containsKey(tmp.getGroup())){
                        groupMap.put(tmp.getGroup(), new HashMap<String,Object>());
                    }
                    groupMap.get(tmp.getGroup()).put(tmp.getId(), tmp.getValue());
                }
            }
            for(Map.Entry entry : groupMap.entrySet()) {
                parameter.put((String) entry.getKey(), entry.getValue());
            }
        }

        parameter.put("modelPath",modelPath);

        return parameter;
    }

    public String getModelPath() {
        return modelPath;
    }

    public void setModelPath(String modelPath) {
        this.modelPath = modelPath;
    }
}
